home *** CD-ROM | disk | FTP | other *** search
- /* RawtoILBM
- * Converts raw file (from ILBMtoRaw) into an ILBM
- * Requires linkage with several iffparse modiules - See Makefile
- */
-
- #include "iffp/ilbmapp.h"
-
- #include <intuition/intuitionbase.h>
- #include <workbench/workbench.h>
-
- #ifdef LATTICE
- int CXBRK(void) { return(0); } /* Disable Lattice CTRL/C handling */
- int chkabort(void) { return(0); } /* really */
- #endif
-
- char *vers = "\0$VER: RawtoILBM 37.5";
- char *Copyright =
- "RawtoILBM v37.5 - converts raw file to ILBM - Freely Redistributable";
- #define MINARGS 6
- char *usage = "Usage: RawtoILBM rawname ilbmname width height depth\n";
-
- void bye(UBYTE *s,int e);
- void cleanup(void);
-
- struct Library *IntuitionBase = NULL;
- struct Library *GfxBase = NULL;
- struct Library *IFFParseBase = NULL;
-
- struct ILBMInfo ilbm = {0};
-
- USHORT colortable[MAXAMCOLORREG];
-
- BOOL fromWB;
-
-
- void main(int argc, char **argv)
- {
- LONG error = 0L, rawfile, rlen;
- USHORT width, height, depth, pwidth, pheight, pmode, extra;
- ULONG plsize;
- char *rawname,*ilbmname;
- int k;
-
- fromWB = (argc==0) ? TRUE : FALSE;
-
- if(!(IntuitionBase = OpenLibrary("intuition.library", 0)))
- bye("Can't open intuition library.\n",RETURN_WARN);
-
- if(!(GfxBase = OpenLibrary("graphics.library",0)))
- bye("Can't open graphics library.\n",RETURN_WARN);
-
- if(!(IFFParseBase = OpenLibrary("iffparse.library",0)))
- bye("Can't open iffparse library.\n",RETURN_WARN);
-
- if(!(ilbm.ParseInfo.iff = AllocIFF()))
- bye(IFFerr(IFFERR_NOMEM),RETURN_WARN);
-
- if(argc==MINARGS) /* Passed filenames via command line */
- {
- rawname = argv[1];
- ilbmname = argv[2];
- width = atoi(argv[3]);
- height = atoi(argv[4]);
- depth = atoi(argv[5]);
-
- /* Page width, height, and mode for saved ILBM */
- pwidth = width < 320 ? 320 : width;
- pheight = height < 200 ? 200 : height;
- pmode = pwidth >= 640 ? HIRES : 0L;
- pmode |= pheight >= 400 ? LACE : 0L;
-
- plsize = RASSIZE(width,height);
- }
- else
- {
- printf("%s\n%s\n",Copyright,usage);
- bye("\n",RETURN_OK);
- }
-
-
- if(!(rawfile = Open(rawname,MODE_OLDFILE)))
- {
- printf("Can't open raw file '%s'\n",rawname);
- bye(" ",RETURN_WARN);
- }
-
- /*
- * Allocate Bitmap and planes
- */
- extra = depth > 8 ? depth - 8 : 0;
- if(ilbm.brbitmap = AllocMem(sizeof(struct BitMap) + (extra<<2),
- MEMF_CLEAR))
- {
- InitBitMap(ilbm.brbitmap,depth,width,height);
- for(k=0, error=0, rlen=1; k<depth && (!error) && (rlen >0); k++)
- {
- if(!(ilbm.brbitmap->Planes[k] = AllocRaster(width,height)))
- error = IFFERR_NOMEM;
- if(! error)
- {
- BltClear(ilbm.brbitmap->Planes[k], RASSIZE(width,height),0);
- /* Read a plane */
- rlen = Read(rawfile,ilbm.brbitmap->Planes[k],plsize);
- }
- }
-
- /* get colortable */
- if((!error)&&(rlen > 0))
- rlen=Read(rawfile,colortable,(MIN(1<<depth,MAXAMCOLORREG)<<1));
-
- if((error)||(rlen<=0))
- {
- if(rlen <= 0) printf("Error loading raw file - check dimensions\n");
- else printf("Error allocating planes\n");
- }
- else
- {
- error = saveilbm(&ilbm, ilbm.brbitmap, pmode,
- width, height, pwidth, pheight,
- colortable, MIN(1<<depth,MAXAMCOLORREG), 4, /* colors */
- mskNone, 0, /* masking. transColor */
- NULL, NULL, /* additional chunk lists */
- ilbmname);
- }
-
- for(k=0; k<depth; k++)
- {
- if(ilbm.brbitmap->Planes[k])
- FreeRaster(ilbm.brbitmap->Planes[k],width,height);
- }
- FreeMem(ilbm.brbitmap, sizeof(struct BitMap) + (extra << 2));
- }
-
- Close(rawfile);
-
- if(error)
- {
- printf("%s\n",IFFerr(error));
- bye(" ", RETURN_FAIL);
- }
- else bye("",RETURN_OK);
- }
-
-
- void bye(UBYTE *s,int e)
- {
- if(s&&(*s)) printf("%s\n",s);
- if ((fromWB)&&(*s)) /* Wait so user can read messages */
- {
- printf("\nPRESS RETURN TO EXIT\n");
- while(getchar() != '\n');
- }
- cleanup();
- exit(e);
- }
-
- void cleanup()
- {
- if(ilbm.ParseInfo.iff) FreeIFF(ilbm.ParseInfo.iff);
-
- if(GfxBase) CloseLibrary(GfxBase);
- if(IntuitionBase) CloseLibrary(IntuitionBase);
- if(IFFParseBase) CloseLibrary(IFFParseBase);
- }
-
-